#include <malloc.h>
#include "stdio.h"

/**
 * 删除顺序表中值在min和max之间的数
 */

// 定义一个顺序表结构体
typedef struct Seqlist {
    // 定义顺序表长度
    int length;
    // 定义顺序表的元素
    int *elem;
} Seqlist;

/**
 * 定义删除方法
 * @param L
 * @param min
 * @param max
 */
void Delete(Seqlist *L, int min, int max) {
    int n = 0;
    for (int i = 0; i < L->length; ++i){
        int itemValue = L->elem[i];
        if(itemValue>=min && itemValue<=max) {
            n++;
        } else {
            L->elem[i-n]=L->elem[i];
        }
    }
    L->length-=n;
}

/**
 * 定义一个函数动态创建循序表
 * @param length
 * @return
 */
Seqlist *createSeqList(int length) {
    // 初始化一个
    Seqlist *L = (Seqlist *) malloc(sizeof(Seqlist));
    // 假设长度为10
    L->length = length;
    L->elem = (int *) malloc(sizeof(int) * L->length);
    return L;
}

/**
 * 定义一个释放顺序表的函数
 * @param L
 */
void freeSeqList(Seqlist *L) {
    free(L->elem);
    free(L);
}

int main() {
    // 创建一个顺序表
    Seqlist *L = createSeqList(10);
    for (int i = 0; i < L->length; ++i) {
        L->elem[i] = i;
    }
    for (int i = 0; i < L->length; ++i) {
        printf("%d,", L->elem[i]);
    }
    printf("\nnow list length: %d", L->length);
    Delete(L, 4, 7);
    printf("\nshowSeqListData\n");
    for (int i = 0; i < L->length; ++i) {
        printf("%d,", L->elem[i]);
    }
    printf("\nnow list length: %d", L->length);
    // 释放L的内存
    freeSeqList(L);
    return 0;
}

